import request from "@/utils/request";

const USER_BASE_URL = "/core/company";

const suppInfoApi = {
  /**
   * 查询客户信息
   *
   * @param queryParams 查询参数
   * @returns 请求结果
   */
  getPage(queryParams: suppInfoPageQuery): Promise<any> {
    return request<any, PageResult<suppInfoPageQuery[]>>({
      url: `${USER_BASE_URL}/list`,
      method: "post",
      data: {
        ...queryParams,
        isVendor: 1,
      },
    });
  },

  /**
   * 添加基础信息
   * @param data 添加数据
   * @returns 请求结果
   */
  add(data: suppInfoPageVO): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/add`,
      method: "post",
      data: {
        ...data,
        isVendor: 1,
      },
    });
  },

  /**
   * 更新基础信息
   * @param data 更新数据
   * @returns 请求结果
   */
  update(data: suppInfoPageVO): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/update`,
      method: "post",
      data,
    });
  },

  /**
   * 根据ID删除基础信息
   * @param id ID
   * @returns 请求结果
   */
  deleteById(id: number): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/delete/${id}`,
      method: "post",
    });
  },

  /**
   * 审核
   * @param queryParams 查询参数
   * @returns 请求结果
   */
  auditContract(queryParams: { id: number; status: string; auditOpinion?: string }): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contract/audit`,
      method: "post",
      data: queryParams,
    });
  },

  // /**
  //  * 查询客户
  //  * @returns 请求结果
  //  */
  // getCompanyCount(): Promise<any> {
  //   return request({
  //     url: `${USER_BASE_URL}/count`,
  //     method: "get",
  //   });
  // },

  /**
   * 添加地址
   * @param data 添加数据
   * @returns 请求结果
   */
  addAddress(data: AddressInfo): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/address/add`,
      method: "post",
      data,
    });
  },
  /**
   * 更新地址
   * @param data 更新数据
   * @returns 请求结果
   */
  updateAddress(data: AddressInfo): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/address/update`,
      method: "post",
      data,
    });
  },

  /**
   * 根据ID删除地址
   * @param id ID
   * @returns 请求结果
   */
  deleteAddressById(id: number): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/address/delete`,
      method: "post",
      data: {
        id,
      },
    });
  },
  /**
   * 查询地址
   * @returns 请求结果
   * @param queryParams 查询参数
   */
  getAddressPage(queryParams: suppInfoPageQuery): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/address/list`,
      method: "post",
      data: queryParams,
    });
  },
  /**
   * 添加联系人
   * @returns 请求结果
   */

  addContact(data: CompanyContact): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contact/add`,
      method: "post",
      data,
    });
  },
  /**
   * 更新联系人
   * @param data 更新数据
   * @returns 请求结果
   */
  updateContact(data: CompanyContact): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contact/update`,
      method: "post",
      data,
    });
  },

  /**
   * 根据ID删除联系人
   * @param id ID
   * @returns 请求结果
   */
  deleteContactById(id: number): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contact/delete`,
      method: "post",
      data: {
        id,
      },
    });
  },
  /**
   * 查询联系人
   * @returns 请求结果
   * @param queryParams 查询参数
   */
  getContactPage(queryParams: suppInfoPageQuery): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contact/list`,
      method: "post",
      data: queryParams,
    });
  },

  /**
   * 新增合同
   * @param queryParams 查询参数
   * @returns 请求结果
   */
  // addContract(queryParams: salesContract): Promise<any> {
  //   return request<any, PageResult<any>>({
  //     url: `${USER_BASE_URL}/contract/save`,
  //     method: "post",
  //     data: { ...queryParams, isVendor: 1 },
  //   });
  // },
  /**
   * 分页查询合同
   * @param queryParams 查询参数
   * @returns 请求结果
   */
  getContractList(queryParams: salesContractQuery): Promise<any> {
    return request<any, PageResult<any>>({
      url: `${USER_BASE_URL}/contract/list`,
      method: "post",
      data: { ...queryParams, isVendor: 1 },
    });
  },

  /**
   * 删除合同记录
   * @param id 删除id
   * @returns 请求结果
   */
  deleteContract(id: number): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contract/delete`,
      method: "post",
      data: { id },
    });
  },

  /**
   * 更新合同信息
   * @param queryParams 查询参数
   * @returns 请求结果
   */
  updateContract(queryParams: salesContract): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contract/save`,
      method: "post",
      data: queryParams,
    });
  },

  /**
   * 获取合同明细信息
   * @param queryParams 查询参数
   * @returns 请求结果
   */
  getContractDetail(queryParams: salesContractDetailQuery): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contract/product/list`,
      method: "post",
      data: queryParams,
    });
  },
  /**
   * 新增合同信息
   * @param queryParams 查询参数
   * @returns 请求结果
   */
  addContractDetail(queryParams: salesContractDetail): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contract/product/save`,
      method: "post",
      data: queryParams,
    });
  },
  /**
   * 删除合同明细信息
   * @param id 删除id
   * @returns 请求结果
   */
  deleteContractDetail(id: number): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contract/product/delete`,
      method: "post",
      data: { id },
    });
  },

  /**
   * 修改合同明细信息
   * @param queryParams 查询参数
   * @returns 请求结果
   */
  updateContractDetail(queryParams: salesContractDetail): Promise<any> {
    return request({
      url: `${USER_BASE_URL}/contract/product/save`,
      method: "post",
      data: queryParams,
    });
  },
};

export default suppInfoApi;

/**
 * 客户信息查询参数
 */
export interface suppInfoPageQuery extends PageQuery {
  //录入时间

  code?: string;
  salesMan?: string;
  companyName?: string;
  status?: number;
  inputTime?: string[];
  startTime?: string;
  endTime?: string;
  parentCode?: string;
  suppType?: string;
}

/**
 * 供应商信息表信息
 */
export interface suppInfoPageVO {
  /**
   * 唯一标识符
   */
  id?: number;

  /**
   * 客户编码
   */
  code?: string;

  /**
   * 字首（可选）
   */
  prefix?: string;

  /**
   * 流水号（可选）
   */
  genNo?: number;

  /**
   * 中文名称
   */
  companyName?: string;

  /**
   * 英文名称
   */
  otherName?: string;

  /**
   * 简称
   */
  nickName?: string;

  /**
   * 是否为客户
   */
  isClient?: boolean;

  /**
   * 是否为供应商
   */
  isVendor?: boolean;

  /**
   * 付款条款
   */
  paymentTerm?: string;

  /**
   * 贸易条款
   */
  tradeTerm?: string;

  /**
   * 交易货币
   */
  currency?: string;

  /**
   * 主要联系人
   */
  contactPerson?: string;

  /**
   * 银行信息
   */
  bankInfo?: string;
  /**
   * 开户银行
   */
  bankName?: string;

  /**
   * 公司主页
   */
  website?: string;

  /**
   * 备注
   */
  remark?: string;

  /**
   * 对应财务系统客户编号
   */
  accCode?: string;

  /**
   * 对应财务系统客户名称
   */
  accName?: string;

  /**
   * 状态
   */
  status?: number;

  /**
   * 创建时间
   */
  createTime?: string;

  /**
   * 创建人
   */
  createName?: string;

  /**
   * 创建人ID
   */
  createUser?: number;

  /**
   * 修改时间
   */
  modifyTime?: string;

  /**
   * 修改人
   */
  modifyName?: string;

  /**
   * 修改人ID
   */
  modifyUser?: number;

  /**
   * 审核时间
   */
  approvalTime?: string;

  /**
   * 审核人
   */
  approvalName?: string;

  /**
   * 审核人ID
   */
  approvalUser?: number;

  /**
   * 附件信息
   * {
   *    fileName: string;
   *    fileUrl: string;
   * }[]
   */
  fileInfoJson?: string;
  /**
   * 其它附件
   */
  otherFile?: string;
  /**
   * 业务员
   */
  salesMan?: string;

  /**
   * 授信截止时间
   */
  creditDeadline?: string;

  /**
   * 营业执照代码
   */

  businessLicenseNo?: string;

  suppType: string;

  /**
   * 供应商评分
   */
  suppScore?: number;
  /**
   * 供应商等级
   */
  suppLevel?: number; //A级（核心供应商），B级（合格供应商），C级（观察供应商），D级（淘汰供应商）
}

/**
 * 公司联系人信息接口
 */
export interface CompanyContact {
  /**
   * 唯一标识符
   */
  id: number;

  /**
   * 联系人编号
   */
  code?: string;

  /**
   * 所属公司编号（可选）
   */
  parentCode?: string;

  /**
   * 序号
   */
  rowSeq?: number;

  /**
   * 联系人姓名（可选）
   */
  contactPerson?: string;

  /**
   * 所属部门（可选）
   */
  department?: string;

  /**
   * 职位（可选）
   */
  position?: string;

  /**
   * 联系电话（可选）
   */
  tel?: string;

  /**
   * 传真号码（可选）
   */
  fax?: string;

  /**
   * 电子邮件（可选）
   */
  email?: string;

  /**
   * 备注信息（可选）
   */
  remark?: string;

  /**
   * 创建时间（可选）
   */
  createTime?: string;

  /**
   * 创建人姓名（可选）
   */
  createName?: string;

  /**
   * 创建人ID（可选）
   */
  createUser?: number;

  /**
   * 最后修改时间（可选）
   */
  modifyTime?: string;

  /**
   * 最后修改人姓名（可选）
   */
  modifyName?: string;

  /**
   * 最后修改人ID（可选）
   */
  modifyUser?: number;
}

/**
 * 地址信息接口
 */
export interface AddressInfo {
  /**
   * 唯一标识符
   */
  id: number;

  /**
   * 地址编号
   */
  code?: string;

  /**
   * 父级公司编号
   */
  parentCode?: string | null;

  /**
   * 序号
   */
  rowSeq?: number;

  /**
   * 地址名称
   */
  addressName?: string | null;

  /**
   * 详细地址
   */
  address?: string | null;

  /**
   * 是否为账单地址（0=否，1=是）
   */
  isBilling?: number;

  /**
   * 是否为送货地址（0=否，1=是）
   */
  isShipping?: number;

  /**
   * 是否为默认地址（0=否，1=是）
   */
  isDefault?: number;

  /**
   * 联系人
   */
  contactPerson?: string;

  /**
   * 电话
   */
  tel?: string | null;

  /**
   * 传真
   */
  fax?: string | null;

  /**
   * 邮箱
   */
  email?: string | null;

  /**
   * 备注
   */
  remark?: string | null;

  /**
   * 创建时间
   */
  createTime?: Date | null;

  /**
   * 创建人姓名
   */
  createName?: string | null;

  /**
   * 创建人ID
   */
  createUserId?: number | null;

  /**
   * 最后修改时间
   */
  modifyTime?: Date | null;

  /**
   * 最后修改人姓名
   */
  modifyName?: string | null;

  /**
   * 最后修改人ID
   */
  modifyUserId?: number | null;

  /**
   * 是否已删除（0=正常，1=已删除）
   */
  isDeleted?: number;
}

export interface salesContractQuery extends PageQuery, salesContract {
  signDateStart?: string;
  signDateEnd?: string;
  expireDateEnd?: string;
  expireDateStart?: string;
}

/**
 * 销售合约表
 */
export interface salesContract {
  id?: number; // 自增ID
  // code?: string; // 合同编号
  companyCode?: string; // 客户编号，可为空
  companyName?: string; // 客户名称，可为空
  status?: string; // 合同状态，可为空
  signDate?: string; // 合同签订日期，可为空
  expireDate?: string; // 合同到期日期，可为空
  paymentTerms?: string[]; // 付款条款，可为空
  transactionTerms?: string[]; // 交易条款，可为空
  contactPerson?: string; // 联系人，可为空
  contactInfo?: string; // 联系电话，可为空
  salesMan?: string; // 业务员，可为空
  remark?: string; // 备注，可为空
  auditOpinion?: string; // 审核意见，可为空
  attachment?: string; // 合同附件，可为空
  otherAttachment?: string; // 其他附件，可为空
  bankInfo?: string; // 银行信息，可为空
  bankName?: string; // 银行名称，可为空

  perOrderConfirmCount?: number; // 每单确认份数，可为空
  perMealPrice?: number; // 每单默认人餐单价，可为空
  perOrderDeliveryCount?: number; // 每单默认配送份数，可为空
  isSystemCreateDelivery?: number; // 是否系统生成配送订单，可为空
  deliveryStartDate?: string; // 配送起送时间，可为空
  // deliveryType?: number; // 配送规则类型 1=每天 2=每周，可为空
  // deliveryDays?: number; // 每天配送-间隔天数，可为空
  // deliveryWeeks?: (string | number)[]; // 每周配送-选中星期，可为空
  deliveryCron?: string; // 配送规则cron表达式，可为空
  createTime?: string; // 创建时间，可为空
  createName?: string; // 创建人，可为空
  createUser?: number; // 创建人ID，可为空
  modifyTime?: string; // 修改时间，可为空
  modifyName?: string; // 修改人，可为空
  modifyUser?: number; // 修改人ID，可为空
  productList?: salesContractDetail[]; // 产品列表，可为空
}

export interface salesContractDetailQuery extends PageQuery, salesContractDetail {}

/**
 * 销售合约明细
 */
export interface salesContractDetail {
  id?: number; // 自增ID
  contractCode?: string; // 合同编号
  productCode?: string; // 产品编号，可为空
  productName?: string; // 产品名称，可为空
  productType?: string; // 产品类型，可为空

  price?: number; // 单价(元)，可为空
  remark?: string; // 备注，可为空
  createTime?: string; // 创建时间，可为空
  createName?: string; // 创建人，可为空
  createUser?: number; // 创建人ID，可为空
  modifyTime?: string; // 修改时间，可为空
  modifyName?: string; // 修改人，可为空
  modifyUser?: number; // 修改人ID，可为空
  supplyMonths?: string; // 供应月份，可为空
  dailySupplyLimit?: number; // 每日供应上限，可为空
}
